import 'package:flutter/material.dart'; // Material Design 风格组件（如 Scaffold、AppBar、TextField 等）
import 'package:flutter/cupertino.dart'; // iOS 风格组件（如 CupertinoNavigationBar、CupertinoButton 等）

// 公共的筛选器类
class CommonPicker{
  // 这里Future类型可以类似js的异步Promise对象
  static Future<int?> showPicker({
    BuildContext? context,// 当前的 BuildContext。
    List<String>? options,// 选择器的选项列表
    int? value,// 当前选中的索引值
    double? height,//弹窗高度
  }){
     // 选择器高度为空处理
     var selectHeight = height ?? MediaQuery.of(context!).size.height * 0.33;
     // showCupertinoModalPopup本质是新开一个透明页面的路由,如果需要触发它then回调则通过Navigator.of(context).pop，直接回退上一个页面并携带参数
     return showCupertinoModalPopup<int>(
      context: context!,
       builder: (BuildContext? context){
        // 按钮样式
        var buttonTextStyle = TextStyle(
         fontWeight: FontWeight.w600,
         color: Theme.of(context!).primaryColor,
        );
        // 滚动选择器控制器
        var pickController = FixedExtentScrollController(initialItem: value!);
        // 设置容器圆角样式
        var boxRadious = const BorderRadius.only(topLeft: Radius.circular(20.0),topRight: Radius.circular(20.0));
        return Container(
          decoration: BoxDecoration(
             color: Colors.grey,
             borderRadius: boxRadious
          ),
          height: selectHeight,
          child: Column(
            children: [
              Container(
                height: 40.0,
                padding: const EdgeInsets.only(top: 5.0),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: boxRadious,
                ),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    TextButton(
                      onPressed: (){
                        // 关闭选择器,可以选中携带参数
                        Navigator.of(context).pop();
                      }, 
                      child: Text('取消',style: buttonTextStyle)
                    ),
                     TextButton(
                      onPressed: (){
                        // 获取滚动选择器选中的项并通过返回上一个路由的方式回传给父级
                        Navigator.of(context).pop(pickController.selectedItem);
                      }, 
                      child: Text('确定',style: buttonTextStyle,)
                    )
                  ],
                ),
              ),
              Expanded(
                child: CupertinoPicker(
                  // 创建一个滚动控制器，用于控制滚动位置
                  scrollController: pickController,
                  // Theme.of(context!).scaffoldBackgroundColor 是 Flutter 中用于获取最近上下文主题下 Scaffold 背景色的写法
                  backgroundColor: Theme.of(context).scaffoldBackgroundColor,// 设置选择器背景色为当前主题下 Scaffold 的背景色
                  itemExtent: 32.0, // 每个选项的高度，设置为 32.0
                  onSelectedItemChanged: (val){

                  },// 滑动并选中某个选项时触发的回调函数
                  children: options!.map((item)=>Text(item)).toList()
                )
              )
            ],
          ),
        );
       }
    );
  }
}

